home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Windows Expert
/
Windows Expert.iso
/
desktop
/
executor.zip
/
EXECSRC.ZIP
/
EXECUTOR.C
next >
Wrap
C/C++ Source or Header
|
1991-06-25
|
10KB
|
272 lines
//
// EXECUTOR.EXE
//
// Version 1.0
//
// 25 June 1991
//
// (c) 1991 by Innovation Inc
//
// Developed by Chris Nystrom, and J.R. McConnell
//
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>
#include "executor.h"
char
szIFileName [96] = "", // Input File Name
szFileSpec [16] = "*.exe", // Initial File Specification
szAppName [] = "Executor"; // Application Name
HANDLE hInstance;
int PASCAL WinMain (HANDLE, HANDLE, LPSTR, int);
long FAR PASCAL WndProc (HWND, WORD, WORD, LONG);
BOOL FAR PASCAL FileDlgProc (HWND, WORD, WORD, LONG);
BOOL FAR PASCAL AboutDlgProc (HWND, WORD, WORD, LONG);
int PASCAL WinMain (HANDLE hInstance, HANDLE hPrevInstance,
LPSTR lpszCmdParam, int nCmdShow)
{
HWND hWnd;
MSG message;
WNDCLASS class;
HMENU hMenu;
if (!hPrevInstance)
{
class.style = NULL;
class.lpfnWndProc = WndProc;
class.cbClsExtra = 0;
class.cbWndExtra = 0;
class.hInstance = hInstance;
class.hIcon = LoadIcon (hInstance, szAppName);
class.hCursor = LoadCursor (NULL, IDC_ARROW);
class.hbrBackground = GetStockObject (WHITE_BRUSH);
class.lpszMenuName = szAppName;
class.lpszClassName = szAppName;
RegisterClass (&class);
}
hWnd = CreateWindow (szAppName, "File Executor", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL);
hMenu = GetSystemMenu (hWnd, FALSE);
AppendMenu (hMenu, MF_SEPARATOR, 0, NULL);
AppendMenu (hMenu, MF_STRING, IDM_ABOUT, "About ...");
ShowWindow (hWnd, SW_SHOWMINNOACTIVE) ;
UpdateWindow (hWnd);
while (GetMessage (&message, NULL, 0, 0))
{
TranslateMessage(&message);
DispatchMessage(&message);
}
return message.wParam;
}
// Standard Windows Procedure
long FAR PASCAL WndProc (HWND hWnd, WORD message, WORD wParam, LONG lParam)
{
static FARPROC lpfnFileDlgProc;
static FARPROC lpfnAboutDlgProc;
switch (message)
{
// Create Application and Dialog Boxes
case WM_CREATE:
hInstance = ((LPCREATESTRUCT) lParam) -> hInstance;
lpfnFileDlgProc = MakeProcInstance (FileDlgProc, hInstance);
lpfnAboutDlgProc = MakeProcInstance (AboutDlgProc, hInstance);
return 0;
case WM_SYSCOMMAND:
switch (wParam)
{
// About selected from System Menu
case IDM_ABOUT:
DialogBox (hInstance, "AboutBox", hWnd,
lpfnAboutDlgProc);
return 0;
}
break;
// Open File Selection Dialog Box and execute program
case WM_QUERYOPEN:
DialogBox (hInstance, "FILE", hWnd, lpfnFileDlgProc);
if (strlen(szIFileName) > 0)
WinExec(szIFileName, SW_SHOWNORMAL);
return 0;
// Quit Application
case WM_DESTROY:
PostQuitMessage (0);
return 0;
}
return DefWindowProc (hWnd, message, wParam, lParam);
}
// Procedure for File Selection Dialog Box
BOOL FAR PASCAL FileDlgProc (HWND hDlg, WORD message, WORD wParam, LONG lParam)
{
char
work1 [80], // Temporary workspace 1
work2 [80], // Temporary workspace 2
cLastChar = 0x00; // chr 0 (last char of string)
short nEditLen = 0x00; // Length of Edit Field
static int nExtFlag = DLG_EXE; // Current FileSpec Flag
switch (message)
{
case WM_INITDIALOG:
SendDlgItemMessage (hDlg, IDD_IFNAME, EM_LIMITTEXT, 80, 0L);
DlgDirList (hDlg, szFileSpec, IDD_FLIST, NULL, FILES);
DlgDirList (hDlg, szFileSpec, IDD_DLIST, IDD_FPATH, PATH);
SetDlgItemText (hDlg, IDD_IFNAME, szFileSpec);
InvalidateRect (hDlg, NULL, TRUE);
CheckRadioButton(hDlg, DLG_ALL, DLG_EXE, nExtFlag);
SendMessage (hDlg, WM_COMMAND, DLG_OK, 0L);
return TRUE;
case WM_COMMAND:
switch (wParam)
{
case IDD_FLIST:
switch (HIWORD (lParam))
{
case LBN_SELCHANGE:
DlgDirSelect (hDlg, szIFileName, IDD_FLIST);
SetDlgItemText (hDlg, IDD_IFNAME, szIFileName);
return TRUE;
case LBN_DBLCLK:
DlgDirSelect (hDlg, szIFileName, IDD_FLIST);
SetDlgItemText (hDlg, IDD_IFNAME, szIFileName);
SendMessage (hDlg, WM_COMMAND, DLG_OK, 0L);
return TRUE;
}
break;
case IDD_DLIST:
switch (HIWORD (lParam))
{
case LBN_SELCHANGE:
DlgDirSelect (hDlg, szIFileName, IDD_DLIST);
lstrcat (szIFileName, szFileSpec);
SetDlgItemText (hDlg, IDD_IFNAME, szIFileName);
return TRUE;
case LBN_DBLCLK:
DlgDirSelect (hDlg, szIFileName, IDD_DLIST);
lstrcat (szIFileName, szFileSpec);
DlgDirList (hDlg, szFileSpec, IDD_FLIST, NULL, FILES);
DlgDirList (hDlg, szFileSpec, IDD_DLIST, IDD_FPATH, PATH);
SetDlgItemText (hDlg, IDD_IFNAME, szIFileName);
SendMessage (hDlg, WM_COMMAND, DLG_OK, 0L);
return TRUE;
}
break;
case DLG_EXE:
lstrcpy(szFileSpec,"*.exe");
lstrcpy (szIFileName, szFileSpec);
nExtFlag = DLG_EXE;
SetDlgItemText (hDlg, IDD_IFNAME, szIFileName);
SendMessage (hDlg, WM_COMMAND, DLG_OK, 0L);
return TRUE;
case DLG_COM:
lstrcpy(szFileSpec,"*.com");
lstrcpy (szIFileName, szFileSpec);
nExtFlag = DLG_COM;
SetDlgItemText (hDlg, IDD_IFNAME, szIFileName);
SendMessage (hDlg, WM_COMMAND, DLG_OK, 0L);
return TRUE;
case DLG_BAT:
lstrcpy(szFileSpec,"*.bat");
lstrcpy (szIFileName, szFileSpec);
nExtFlag = DLG_BAT;
SetDlgItemText (hDlg, IDD_IFNAME, szIFileName);
SendMessage (hDlg, WM_COMMAND, DLG_OK, 0L);
return TRUE;
case DLG_ALL:
lstrcpy(szFileSpec,"*.*");
lstrcpy (szIFileName, szFileSpec);
nExtFlag = DLG_ALL;
SetDlgItemText (hDlg, IDD_IFNAME, szIFileName);
SendMessage (hDlg, WM_COMMAND, DLG_OK, 0L);
return TRUE;
case DLG_OK:
GetDlgItemText (hDlg, IDD_IFNAME, szIFileName, 80);
nEditLen = lstrlen (szIFileName);
cLastChar = *AnsiPrev (szIFileName, szIFileName + nEditLen);
if (cLastChar == '\\' || cLastChar == ':')
lstrcat (szIFileName, szFileSpec);
if (strchr (szIFileName, '*') || strchr (szIFileName, '?'))
{
DlgDirList (hDlg, szIFileName, IDD_FLIST, NULL, FILES);
if (DlgDirList (hDlg, szIFileName, IDD_DLIST, IDD_FPATH, PATH))
{
lstrcpy (szFileSpec, szIFileName);
SetDlgItemText (hDlg, IDD_IFNAME, szFileSpec);
}
else
MessageBeep (0);
return TRUE;
}
lstrcat (lstrcat (szIFileName,"\\"), szFileSpec);
DlgDirList (hDlg, szIFileName, IDD_FLIST, NULL, FILES);
if (DlgDirList (hDlg, szIFileName, IDD_DLIST, IDD_FPATH, PATH))
{
lstrcpy (szFileSpec, szIFileName);
SetDlgItemText (hDlg, IDD_IFNAME, szFileSpec);
return TRUE;
}
szIFileName [nEditLen] = '\0';
if (access (szIFileName, 0x04))
{
LoadString (hInstance, ERR1, work1, 128);
sprintf (work2, work1, szIFileName);
MessageBox (hDlg, work2, szAppName, MB_ICONINFORMATION | MB_OK);
return TRUE;
}
OemToAnsi (szIFileName, szIFileName);
EndDialog (hDlg, FALSE);
return TRUE;
case DLG_CAN:
szIFileName [0] = 0x00;
EndDialog (hDlg, FALSE);
return TRUE;
}
}
return FALSE;
}
// Procedure for About Dialog Box
BOOL FAR PASCAL AboutDlgProc(HWND hDlg, WORD message, WORD wParam, LONG lParam)
{
switch (message)
{
case WM_INITDIALOG:
return (TRUE);
case WM_COMMAND:
switch (wParam)
{
case IDOK:
case IDCANCEL:
EndDialog(hDlg, TRUE);
return (TRUE);
}
break;
}
return (FALSE);
}